package com.study.model.mdao;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.study.model.pojo.Orderform;
/**
 * 库存表mapper
 * @author 郭星
 *
 */
@Mapper
public interface DeportFormMapper {
	/**
	 *  库存分页带条件查询
	 * @param selects
	 * @param selectinput
	 * @param currentPage
	 * @param pagesize
	 * @param list
	 * @param uid
	 * @param show
	 * @return
	 */
	List<JSONObject> findByQueryOrder(@Param("selects")String selects,@Param("selectinput") String selectinput,
			@Param("currentPage") int currentPage,@Param("pagesize") int pagesize,@Param("list")List<Integer> list
			,@Param("uid")Integer uid);

	/**
	 *  入库分页带条件查询
	 * @param selects
	 * @param selectinput
	 * @param currentPage
	 * @param pagesize
	 * @param list
	 * @param uid
	 * @param show
	 * @return
	 */
	List<JSONObject> findByInQueryOrder(@Param("selects")String selects,@Param("selectinput") String selectinput,
			@Param("currentPage") int currentPage,@Param("pagesize") int pagesize,@Param("list")List<Integer> list
			,@Param("uid")Integer uid,@Param("show")Integer show);
	
	/**
	 *  出库分页带条件查询
	 * @param selects
	 * @param selectinput
	 * @param currentPage
	 * @param pagesize
	 * @param list
	 * @param uid
	 * @param show
	 * @return
	 */
	List<JSONObject> findByTrQueryOrder(@Param("selects")String selects,@Param("selectinput") String selectinput,
			@Param("currentPage") int currentPage,@Param("pagesize") int pagesize,@Param("list")List<Integer> list
			,@Param("uid")Integer uid);
	

	/**
	 * 出入库流水表
	 * @param selects
	 * @param selectinput
	 * @param currentPage
	 * @param pagesize
	 * @param list
	 * @param uid
	 * @return
	 */
	List<JSONObject> findByIOQueryOrder(@Param("selects")String selects,@Param("selectinput") String selectinput,
			@Param("currentPage") int currentPage,@Param("pagesize") int pagesize,@Param("list")List<Integer> list
			,@Param("uid")Integer uid,@Param("asw")Integer asw);
	

	/**
	 * 根据商品id查询库存
	 * @param gid
	 * @return
	 */
	JSONObject findByGid(Integer gid);
	
	
	/**
	 * 查询供应商
	 * @param nums
	 * @return
	 */
	JSONObject findByinstocks(int nums);
	
	/**
	 * 查詢客戶
	 * @param nums
	 * @return
	 */
	JSONObject findBytreasury(int nums);
	
	/**
	 * 根据用户Id查询仓库信息
	 * @param uid
	 * @return
	 */
	List<JSONObject> findShelf(@Param("uid")Integer uid);
	
	/**
	 * 手动添加的一条入库单
	 * @param innum
	 * @param theme
	 * @param dgsnum
	 * @param tdate
	 * @param indesc
	 * @return
	 */
	int doInsert( @Param("innum")String innum, @Param("theme")String theme,@Param("dgsnum")Integer dgsnum
			, @Param("tdate")Date tdate, @Param("indesc")String indesc,@Param("uid")String uid);
	
	/**
	 * 查询最大入库单编号id
	 * @return
	 */
	Integer findMaxId();

	/**
	 * 查询对应id的入库单信息
	 * @param ids
	 * @return
	 */
	JSONObject findByInstockId(int ids);

	/**
	 * 修改入库单的信息
	 * @param did
	 * @param titles
	 * @param deport
	 * @param havetime
	 * @param descins
	 * @return
	 */
	int updateByInstockId( @Param("did")String did, 
			 @Param("titles")String titles, 
			 @Param("deport")Integer deport, 
			 @Param("havetime")Date havetime, 
			 @Param("descins")String descins);
	
	/**
	 * 删除对应入库单的入库单详情id
	 * @param id
	 * @return
	 */
	int deletOrderdetails(int id);
	
	
	/**
	 * 查询最大入库详情单编号id
	 * @return
	 */
	Integer findMaxIdDetail();
	
	/**
	 * 添加一条入库详情记录
	 * @param id
	 * @param goid
	 * @param odnum
	 * @param bigDecimal
	 * @param d
	 * @return
	 */
	int insertintodetail(@Param("oid")Integer id, @Param("detailid")String detailid,@Param("goid")Integer goid, 
			@Param("odnum")Integer odnum, @Param("odName")String odName, @Param("odsumprice")double d, @Param("desc")String desc);

	/**
	 * 查询对应入库单Id的商品详情
	 * @param id
	 * @return
	 */
	List<JSONObject> findByOdidDetail(Integer id);
	
	/**
	 * 查询对应采购详单内一个商品的信息
	 * @param id
	 * @param gid
	 * @return
	 */
	JSONObject findBypursdetail(Integer id,Integer gid);
	
	/**
	 * 修改订单详情的数量和备注
	 * @param quat
	 * @param desc
	 */
	void updateDetailQuatityAndDesc(@Param("quat")Integer quat,@Param("desc")String desc,@Param("gid")Integer gid,@Param("innum")Integer innum);
	
	/**
	 * 编辑确认入库状态修改
	 * @param id
	 */
	int okinstock(Integer id);
	
	/**
	 * 生成入库批次
	 * @param id
	 * @param gid
	 * @param sum
	 * @param dgsnum
	 * @param supplier
	 * @param dcgdtime
	 * @return
	 */
	int deportnum(@Param("id")Integer id,@Param("gid")Integer gid
			,@Param("sum")Integer sum ,@Param("dgsnum")Integer dgsnum
			,@Param("supplier")Integer supplier ,@Param("dcgdtime")Integer dcgdtime);
	
	/**
	 * 查询库存表内最大id
	 * @return
	 */
	int findMaxDepotId();
	
	/**
	 * 对应商品明细的库存批次
	 * @param inum
	 * @param dnum
	 * @return
	 */
	int updateInstockDetailDum(Integer inum,Integer dnum);
	
	/**
	 * 删除对应入库单的明细
	 * @param id
	 * @return
	 */
	int delDetails(Integer id);
	
	/**
	 * 删除对应入库单
	 * @param id
	 * @return
	 */
	int del(Integer id);
	
	/**
	 * 生成入库流水记录
	 * @param id
	 * @param oitype
	 * @param dgsnum
	 * @param insum
	 * @param oitime
	 * @param oiman
	 * @param oifillman
	 * @param nums
	 * @return
	 */
	int addinputLife(@Param("id")Integer id,@Param("oitype")Integer oitype
			,@Param("dgsnum")Integer dgsnum,@Param("insum")Integer insum
			,@Param("oitime")Date oitime ,@Param("oiman")Integer oiman
			,@Param("oifillman")Integer oifillman,@Param("nums")Integer nums);
	
	/**
	 * 查询最大出入库流水表记录
	 */
	int findMaxLifeId();
	
	/**
	 * 查询库存里对应仓库且数量大于0的库存批次
	 * @param cnum
	 * @param shelf
	 * @return
	 */
	List<JSONObject> findDeportToCnShelf(Integer cnum,Integer shelf);
	
	/**
	 * 对应订单详情添加对应出库单
	 * @param uid
	 * @param otitle
	 * @param quatity
	 * @param odid
	 * @return
	 */
	int addOutDeports(@Param("uid")Integer uid,@Param("otitle")String otitle
			,@Param("quatity")Integer quatity,@Param("odid")Integer odid,@Param("dnum")Integer dnum  );
	
	/**
	 * 判断此订单是否有出库记录
	 * @param string
	 * @return
	 */
	List<JSONObject> findByOidTotru(String string);
	
	/**
	 * 查询对应出库id的信息
	 * @param string
	 * @return
	 */
	JSONObject findBytnumTotru(Integer string);
	
	/**
	 * 出库出库单
	 * @param id
	 * @return
	 */
	int deletTru(@Param("id")Integer id,@Param("uid")Integer uid,@Param("dates")Date dates);
	
	/**
	 * 通过明细id删除一个出库单
	 * @param id
	 * @return
	 */
	int deletTrubyDetailid(Integer id);
	
	/**
	 * 生成出库流水记录
	 * @param id
	 * @param oitype
	 * @param dgsnum
	 * @param insum
	 * @param oitime
	 * @param oiman
	 * @param oifillman
	 * @param nums
	 * @return
	 */
	int addoutputLife(@Param("id")int id,@Param("oitype")int oitype
			,@Param("dgsnum")Integer dgsnum,@Param("insum")Integer insum
			,@Param("oitime")Date oitime ,@Param("oiman")Integer oiman
			,@Param("oifillman")Integer oifillman,@Param("nums")Integer nums);
	
	/**
	 * 修改库存数量
	 * @param dnum
	 * @param quatity
	 * @return
	 */
	int updateDeport(@Param("dnum")Integer dnum,@Param("quatity")Integer quatity);
}
